#ifndef TOOLS_H
#define TOOLS_H

/**
 * \file Tools.h
 * \brief Fichier contenant des fonctions outils procédurales.
 */

#include <vector>
#include "Circle.h"

using namespace std;

/*!
 *  \brief Récupère la boîte englobante de l'ensemble des cercles.
 *
 *  Calcule les valeurs minimales et maximales de a, b et r pour l'ensemble des cercles.
 *
 *  \param _circles : vector conteant l'ensemble des cercles.
 *  \param _aMin : valeur minimale de a.
 *  \param _bMin : valeur minimale de b.
 *  \param _rMin : valeur minimale de r.
 *  \param _aMax : valeur maximale de a.
 *  \param _bMax : valeur maximale de b.
 *  \param _rMax : valeur maximale de r.
 *  \return : void
 */
void getVectorCirclesBoundingBox ( vector <Circle> _circles, float& _aMin, float& _bMin, float& _rMin, float& _aMax, float& _bMax, float& _rMax );

/*!
 *  \brief Produit scalaire.
 *
 *  Calcule le produit scalaire de deux vecteurs représentés par des objets de type Point.
 *
 *  \param _p1 : premier vecteur.
 *  \param _p2 : second vecteur.
 *  \return : résultat du produit scalaire.
 */
float scalarProduct2D ( CVertexO _p1, CVertexO _p2 );

/*!
 *  \brief Différence entre deux points.
 *
 *  Calcule la différence entre deux Points.
 *
 *  \param _p1 : premier point.
 *  \param _p2 : second point.
 *  \return : résultat de la différence.
 */
CVertexO diffPoint ( CVertexO _p1, CVertexO _p2 );

/*!
 *  \brief Fonction de comparaison pour trier un ensemble de sommets selon leur altitude.
 *
 *  Compare deux sommets selon leur altitude.
 *
 *  \param _v1 : premier sommet.
 *  \param _v2 : second sommey.
 *  \return : booleen.
 */
bool compareVert(CVertexO* _v1, CVertexO* _v2);

#endif

